import { defineStore } from "pinia";

interface Todo {
  id: number;
  name: string;
  isDone: boolean;
}

const useTodosStore = defineStore("todos", {
  state: () => {
    return {
      todoList: [
        { id: 1, name: "吃饭", isDone: true },
        { id: 2, name: "睡觉", isDone: false },
        { id: 3, name: "敲代码", isDone: true },
      ],
    };
  },
  getters: {
    // 已完成数量
    isDoneNum(state) {
      return state.todoList.reduce((p, c) => p + (c.isDone ? 1 : 0), 0);
    },
    // 总数
    total(state) {
      return state.todoList.length;
    },
  },
  actions: {
    // 添加todo
    addTodo(name: string) {
      this.todoList.push({
        id: Date.now(),
        name,
        isDone: false,
      });
    },
    // 修改单个todo
    updateTodo(id: number) {
      // find 方法可能找到，可能没找到
      const todo = this.todoList.find((todo) => todo.id === id) as Todo;
      // 非空断言
      // todo.isDone = !todo!.isDone;
      todo.isDone = !todo.isDone;
    },
    // 删除单个todo
    deleteTodo(id: number) {
      this.todoList = this.todoList.filter((todo) => todo.id !== id);
    },
    // 删除多个todo
    deleteAllTodo() {
      this.todoList = this.todoList.filter((todo) => !todo.isDone);
    },
    // 全选&全不选
    updateAllTodo(isDone: boolean) {
      this.todoList.forEach((todo) => (todo.isDone = isDone));
    },
  },
});

export default useTodosStore;
